/**
 * 获取query参数后面的属性
 * 
 * @param {String} name 需要获取的参数
 */
(function () {
    const getQueryString = (name) => {
        const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
        const url = window.location.href;
        const search = url.substring(url.lastIndexOf('?') + 1);
        const r = search.match(reg);
        if (r != null) {
            return decodeURI(r[2]);
        }
        return null;
    }
    window.getQueryString = getQueryString;
}());

/**
 * 对Date的扩展，将Date转化为指定格式的String
 * 
 * format 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用1-2个占位符，年(y)可以用1-4个占位符，毫秒(S)只能用1个占位符(是1-3位的数字)
 * 
 * (new Date()).pattern('yyyy-MM-dd hh:mm:ss.S') ==> 2012-10-19 18:09:36.123
 * (new Date()).pattern('yyyy-MM-dd E HH:mm:ss') ==> 2012-10-19 二 18:09:36
 * (new Date()).pattern('yyyy-MM-dd EE hh:mm:ss') ==> 2012-10-19 周二 18:09:36
 * (new Date()).pattern('yyyy-MM-dd EEE hh:mm:ss') ==> 2012-10-19 星期二 18:09:36
 * (new Date()).pattern('yyyy-M-d h:m:s.S') ==> 2012-9-5 18:9:36.123
 */
Date.prototype.pattern = function (format = 'yyyy-MM-dd HH:mm:ss') {
    var o = {
        'M+': this.getMonth() + 1, // 月份
        'd+': this.getDate(), // 日
        'h+': this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, // 小时
        'H+': this.getHours(), // 小时
        'm+': this.getMinutes(), // 分
        's+': this.getSeconds(), // 秒
        'S': this.getMilliseconds() // 毫秒
    };

    var week = {
        '0': '/u65e5',
        '1': '/u4e00',
        '2': '/u4e8c',
        '3': '/u4e09',
        '4': '/u56db',
        '5': '/u4e94',
        '6': '/u516d'
    };

    if (/(y+)/.test(format)) {
        format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
    }

    if (/(E+)/.test(format)) {
        format = format.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '/u661f/u671f' : '/u5468') : '') + week[this.getDay() + '']);
    }

    for (var k in o) {
        if (new RegExp('(' + k + ')').test(format)) {
            format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
        }
    }
    return format;
}

/*
 * 格式化时间
 *
 * num 格式化时间
 * format yyyy-MM-dd HH:mm:ss.S
 * dateFormat(new Date(), 'yyyy-MM-dd HH:mm:ss') // 2012-10-19 18:09:36.123
 */
function dateFormat (date, format = 'yyyy-MM-dd HH:mm:ss') {
    var o = {
        'M+': date.getMonth() + 1, // 月份
        'd+': date.getDate(), // 日
        'h+': date.getHours() % 12 == 0 ? 12 : date.getHours() % 12, // 小时
        'H+': date.getHours(), // 小时
        'm+': date.getMinutes(), // 分
        's+': date.getSeconds(), // 秒
        'S': date.getMilliseconds() // 毫秒
    };

    if (/(y+)/.test(format)) {
        format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
    }

    for (var k in o) {
        if (new RegExp('(' + k + ')').test(format)) {
            format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
        }
    }
    return format;
}

/*
 * 格式化数字
 *
 * num 格式化目标数字
 * decimal 保留几位小数，默认2位
 * moneyFormat(123456789.87654321, 2) // 123456789.88
 */
function numberFormat (num, decimal = 2) {
    if (isFinite(num)) { // num是数字
        if (num === 0) { // 为0
            return num.toFixed(decimal);
        } else { // 非0
            var res = '0.00';
            var dotIndex = String(num).indexOf('.');
            if (dotIndex === -1) { // 整数
                res = num.toFixed(decimal);
            } else { // 非整数
                res = (Math.round(num * Math.pow(10, decimal)) / Math.pow(10, decimal)).toFixed(decimal); // 四舍五入，然后固定保留2位小数
            }
            return res;
        }
    } else {
        return '0.00';
    }
}

/*
 * 格式化金钱数字
 *
 * num 格式化目标数字
 * decimal 保留几位小数，默认2位
 * split 千分位分隔符，默认为,
 * moneyFormat(123456789.87654321, 2, ',') // 123,456,789.88
 */
function moneyFormat (num, decimal = 2, split = ',') {
    if (isFinite(num)) { // num是数字
        if (num === 0) { // 为0
            return num.toFixed(decimal);
        } else { // 非0
            var res = '';
            var dotIndex = String(num).indexOf('.');
            if (dotIndex === -1) { // 整数
                res = String(num).replace(/(\d)(?=(?:\d{3})+$)/g, `$1${split}`) + '.' + '0'.repeat(decimal);
            } else { // 非整数
                // js四舍五入 Math.round()：正数时4舍5入，负数时5舍6入
                // Math.round(1.5) = 2
                // Math.round(-1.5) = -1
                // Math.round(-1.6) = -2
                // 保留decimals位小数
                const numStr = String((Math.round(num * Math.pow(10, decimal)) / Math.pow(10, decimal)).toFixed(decimal)); // 四舍五入，然后固定保留2位小数
                const decimals = numStr.slice(dotIndex, dotIndex + decimal + 1); // 截取小数位
                res = String(numStr.slice(0, dotIndex)).replace(/(\d)(?=(?:\d{3})+$)/g, `$1${split}`) + decimals;
            }
            return res;
        }
    } else {
        return '--';
    }
}

/**
 * 表格添加新行
 * 
 * tableID 表格ID
 * newRow 新行数据 例如：{id:'',name:'',sex:'',age:'',phone:''}
 */
function tableAddNewRow (tableID, newRow) {
    console.log(tableID, newRow);
    let allData = layui.table.cache[tableID];
    console.log(allData);
    newRow.LAY_TABLE_INDEX = allData.length;
    allData.push(newRow);
    layui.table.reload(tableID, {
        data: allData,
        done: function (res, curr, count) {
            console.log(allData);
        }
    });
}

/*
 * 封装jQuery小插件 用于表格行内容相同时合并
 *
 * colIdx 合并第几列中相同的行（从0开始）
 *
 * $('.layui-table').rowspan(0); // 合并第1列中内容相同的行
 */
// jQuery.fn.rowspan = function (colIdx) {
//     return this.each(function () {
//         var that;
//         $('tr', this).each(function (row) {
//             $('td:eq(' + colIdx + ')', this).filter(':visible').each(function (col) {
//                 if (that != null && $(this).html() == $(that).html()) {
//                     var rowspan = $(that).attr('rowspan');
//                     if (rowspan == undefined) {
//                         $(that).attr('rowspan', 1);
//                         rowspan = $(that).attr('rowspan');
//                     }
//                     rowspan = Number(rowspan) + 1;
//                     $(that).attr('rowspan', rowspan);
//                     $(this).hide();
//                 } else {
//                     that = this;
//                 }
//             });
//         });
//     });
// };

/*
 * 封装jQuery小插件 用于表格单元格（列）内容相同时合并
 *
 * colIdx 合并第几行中相同的列（从0开始）
 * index 跨列范围结束值（从0开始）
 *
 * $('.layui-table').colspan(1, 2); // 合并第2行至第3行中内容相同的列
 */
// jQuery.fn.colspan = function (colIdx, index) {
//     return this.each(function () {
//         $('tr', this).each(function (row) {
//             $('td:eq(' + colIdx + ')', this).each(function (col) {
//                 if ($(this).text() == $(this).next().text()) {
//                     $(this).attr('colspan', index);
//                     // $(this).attr('colspan');
//                     //$(this).text('<div class='layui-table-cel>' + $(this).text() + '</div>');
//                     $(this).text($(this).text());
//                     $(this).next().hide();
//                 }
//             });
//         });
//     });
// };
